######################################################################
# File: log.py                                     Part of DjangoMUD #
#                                                                    #
# Copyright (C) 2010, Joachim Pileborg.                              #
# All rights reserved.                                               #
#                                                                    #
# Redistribution and use in source and binary forms, with or without #
# modification, are permitted provided that the following conditions #
# are met:                                                           #
#                                                                    #
#   o Redistributions of source code must retain the above copyright #
#     notice, this list of conditions and the following disclaimer.  #
#   o Redistributions in binary form must reproduce the above        #
#     copyright notice, this list of conditions and the following    #
#     disclaimer in the documentation and/or other materials         #
#     provided with the distribution.                                #
#   o Neither the name of the author nor the names of its            #
#     contributors may be used to endorse or promote products        #
#     derived from this software without specific prior written      #
#     permission.                                                    #
#                                                                    #
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND             #
# CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,        #
# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF           #
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE           #
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS  #
# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,#
# OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,           #
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY       #
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR     #
# TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF #
# THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF    #
# SUCH DAMAGE.                                                       #
######################################################################

import logging

from django.conf import settings

__all__ = [ 'DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL', 'NET',
            'debug', 'info', 'warn', 'error', 'critical', 'net', 'log',
            'web',
            ]

######################################################################

DEBUG    = logging.DEBUG
INFO     = logging.INFO
WARNING  = logging.WARNING
ERROR    = logging.ERROR
CRITICAL = logging.CRITICAL

# New logging levels
NET = logging.INFO + 1
WEB = logging.INFO + 2

######################################################################

_extra_log_levels = {
    'NET': NET,
    'WEB': WEB,
    }

_logger = None
_logger_handler = None
_logging_initialized = False

if not _logging_initialized:
    for name, level in _extra_log_levels.items():
        logging.addLevelName(level, name)

    _logger = logging.getLogger('djangomud')
    _logger_handler = logging.StreamHandler()

    _logger_handler.setFormatter(logging.Formatter('%(asctime)s :: [%(levelname)s] %(message)s'))
    _logger.addHandler(_logger_handler)

    if settings.DEBUG:
        _logger.setLevel(DEBUG)
    else:
        _logger.setLevel(INFO)

    _logging_initialized = True

######################################################################

def debug(msg, *args, **kwargs):
    _logger.debug(msg, *args, **kwargs)

def info(msg, *args, **kwargs):
    _logger.info(msg, *args, **kwargs)

def warn(msg, *args, **kwargs):
    _logger.warn(msg, *args, **kwargs)

def error(msg, *args, **kwargs):
    _logger.error(msg, *args, **kwargs)

def critical(msg, *args, **kwargs):
    _logger.critical(msg, *args, **kwargs)

def net(msg, *args, **kwargs):
    _logger.log(NET, msg, *args, **kwargs)

def log(level, msg, *args, **kwargs):
    _logger.log(level, msg, *args, **kwargs)

def web(msg, *args, **kwargs):
    _logger.log(WEB, msg, *args, **kwargs)

######################################################################
